package string;

/*
final关键字代表最终、不可改变的。
常见四种用法:
1.可以用来修饰一个类
2.可以用来修饰一个方法
3.还可以用来修饰一个局部变量
4.还可以用来修饰一个成员变量

* */
public class Demo01Final {
    public static void main(String[] args) {
        int num1 = 10;
        System.out.println(num1);
        num1 = 10;
        System.out.println(num1);
        /*
        3.用来修饰一个局部变量
        * */
        // 一旦使用final用来修饰局部变量，那么这个变量就不能进行更改  “一次赋值，终生不变”
        final int num2 = 200;
        System.out.println(num2);
//        num2 = 250;  // 错误写法
        // 正确写法
        final int num3;
        num3 = 20;

        // 对于基本类型来说，不可变说的是变量当中的数据不可改变
        // 对于引用类型来说，不可变说的是变量当中的地址值不可改变
        Student stu1 = new Student("罗志祥");
        System.out.println(stu1);
        System.out.println(stu1.getName());
        stu1 = new Student("周杰伦");
        System.out.println(stu1);
        System.out.println(stu1.getName());
        System.out.println("========================");

        final Student stu2= new Student("高圆圆");
        System.out.println(stu2);
//        stu2 = new Student("尕国际");  // 对对象重新赋值，改变的是地址值，错误写法
        stu2.setName("发哈是法国国王");  // 改变内容，与地址值无关，可行

    }
}
